﻿//3347. 执行操作后元素的最高频率 II
//给你一个整数数组 nums 和两个整数 k 和 numOperations 。
//你必须对 nums 执行 操作  numOperations 次。每次操作中，你可以：
//选择一个下标 i ，它在之前的操作中 没有 被选择过。
//将 nums[i] 增加范围[-k, k] 中的一个整数。
//在执行完所有操作以后，请你返回 nums 中出现 频率最高 元素的出现次数。
//一个元素 x 的 频率 指的是它在数组中出现的次数。




class Solution {
public:
    int maxFrequency(vector<int>& nums, int k, int numOperations)
    {
        unordered_map<int, int> cnt;
        map<int, int> diff;
        for (int x : nums)
        {
            cnt[x]++;
            diff[x];
            diff[x - k]++;
            diff[x + k + 1]--;
        }

        int ans = 0, sum_d = 0;
        for (auto& [x, d] : diff)
        {
            sum_d += d;
            ans = max(ans, min(sum_d, cnt[x] + numOperations));
        }
        return ans;
    }
};